home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / CONTRSRC.ZIP / SRC / SETUP / SETUPSC8.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-11-20  |  31.6 KB  |  797 lines

  1. {*******************
  2. !!! Setup Screen !!! : fix the last bug (I hope !!!)
  3. *******************}
  4.  
  5. program setup ;
  6.  
  7. {$M 2048,3584,3584}
  8.  
  9.     uses dos , crt , win ;
  10.  
  11.     type infowin = record
  12.              x,y,long,haut,coul : integer ;
  13.          end ;
  14.  
  15.     const titledemo = 'CONTRAST - C''est notre télé mais c''est ma commande - DEMO' ;
  16.           titlewincolor = BLEU shl 4 + BLANC ;
  17.           titlewin : infowin = (x:4 ; y:1 ; long:80-4*2 ; haut:3 ; coul:titlewincolor) ;
  18.  
  19.           soundwincolor = BLEU shl 4 + BLANC ;
  20.           soundwin : infowin = (x:20 ; y:6 ; long:80-20*2 ; haut:12 ; coul:soundwincolor) ;
  21.           soundmaxline = 8 ;
  22.           soundbadline = 7 ;
  23.           soundtext : array [1..soundmaxline] of string = (
  24.           'Select a soundcard',
  25.           'Select mixing frequency',
  26.           'Select dma channel',
  27.           'Select io port',
  28.           'Select irq',
  29.           'Select advanced option',
  30.           '',                { = soundbadline }
  31.           'Save & launch (ESC = quit!)') ;
  32.  
  33.           screenbackgroundcolor = BLEU shl 4 + BLANC ;
  34.           soundhighlightcolor = BLEU shl 4 + JAUNE ;
  35.           highlightcolor = GRISCLAIR shl 4 + ROUGE ;
  36.           otherwincolor = ROUGE shl 4 + BLANC ;
  37.  
  38.           cardwincolor = otherwincolor ;
  39.           ioportwincolor = otherwincolor ;
  40.           dmawincolor = otherwincolor ;
  41.           irqwincolor = otherwincolor ;
  42.           mixingwincolor = otherwincolor ;
  43.           advancedwincolor = otherwincolor ;
  44.           advanced2wincolor = otherwincolor ;
  45.           launchwincolor = otherwincolor ;
  46.  
  47.           midaswincolor = BLEU shl 4 + BLANC ;
  48.  
  49.           cardmaxline = 5 ;
  50.           cardwin : infowin = (x:28 ; y:9 ; long:80-2*28 ; haut:cardmaxline+2 ; coul:cardwincolor) ;
  51.           cardtype : array [1..cardmaxline] of string = (
  52.           'Gravis Ultrasound',
  53.           'Pro Audio Spectrum',
  54.           'WindoZe Sound System',
  55.           'Sound BaLster',
  56.           '!!! No Sound !!!') ;
  57.  
  58.           ioportmaxline = 9 ;
  59.           ioportbadline = 8 ;
  60.           ioport : array [1..ioportmaxline] of string = (
  61.           '0x210','0x220','0x230','0x240','0x250','0x260','0x270','','auto') ;
  62.           ioportwin : infowin = (x:35 ; y:7 ; long:9 ; haut:ioportmaxline+2 ; coul:ioportwincolor) ;
  63.  
  64.           dmamaxline = 9 ;
  65.           dmabadline = 8 ;
  66.           dmawin : infowin = (x:36 ; y:7 ; long:8 ; haut:dmamaxline+2 ; coul:dmawincolor) ;
  67.           dma : array [1..dmamaxline] of string = (
  68.           ' 1',' 2',' 3',' 4',' 5',' 6',' 7','','auto') ;
  69.  
  70.           irqmaxline = 17 ;
  71.           irqbadline = 16 ;
  72.           irq : array [1..irqmaxline] of string = (
  73.           ' 1',' 2',' 3',' 4',' 5',' 6',' 7',' 8',' 9','10','11','12','13','14','15','','auto') ;
  74.           irqwin : infowin = (x:35 ; y:3 ; long:8 ; haut:irqmaxline+2 ; coul: irqwincolor) ;
  75.  
  76.           mixingmaxline = 5 ;
  77.           mixingwin : infowin = (x:34 ; y:9 ; long:80-2*34 ; haut:mixingmaxline+2 ; coul:mixingwincolor) ;
  78.           mixingfreq : array [1..mixingmaxline] of string = (
  79.           '11025 Hz','15000 Hz','22050 Hz','33000 Hz','44100 Hz') ;
  80.  
  81.           advancedmaxline = 7 ;
  82.           advancedwin : infowin = (x:32 ; y:9 ; long:80-2*31-1 ; haut:advancedmaxline+2 ; coul:advancedwincolor) ;
  83.           advanced : array [1..advancedmaxline] of string = (
  84.           '[ ] Use EMS',
  85.           '[ ] BPM Tempo',
  86.           '[ ] Surround',
  87.           '[ ] 16 bit',
  88.           '[ ] Stereo',
  89.           '[ ] VGA Comp.',
  90.           '[ ] Quality') ;
  91.  
  92.           advanced2maxline = 1 ;
  93.           advanced2win : infowin = (x:32 ; y:11 ; long:80-2*31-1 ; haut:advanced2maxline+2 ; coul:advanced2wincolor) ;
  94.           advanced2 : array [1..advanced2maxline] of string = (
  95.           '[ ] VGA Comp.') ;
  96.  
  97.           midaswin : infowin = (x:4 ; y:20 ; long: 80-2*4 ; haut: 3 ; coul:midaswincolor) ;
  98.           midastxt = '!!! Our Demo Use Midas Sound System !!!' ;
  99.  
  100.           launchmaxline = 19 ;
  101.           launchbadline = 18 ;
  102.           launchwin : infowin = (x: 28 ; y: 2 ; long: 80-2*28 ; haut: launchmaxline+2 ; coul: launchwincolor) ;
  103.           launch : array [1..launchmaxline] of string = (
  104.           'Shade lines',
  105.           'Contrast Title',
  106.           'Multifire',
  107.           'Rotative zoomer',
  108.           'Distort',
  109.           'Double Plasma',
  110.           'Unlimited sprites',
  111.           'Elephant Zoomer',
  112.           'Dots morphs',
  113.           'Waves',
  114.           'Wolfenstein',
  115.           'Snul Flash',
  116.           'Single Plasma',
  117.           'Transformation',
  118.           'Eyes', 
  119.           'Snake',
  120.           'Starwars scroller',
  121.           '',
  122.           '!!! All the parts !!!') ;
  123.  
  124.           qualitytbl : array [1..3] of char = ('h','l','m') ; { :) }
  125.  
  126.     var usrinput : char ;
  127.  
  128.         f : text ;
  129.  
  130.         i , soundactline , cardactline ,usrcard , usrmixing , usrdma : integer ;
  131.         usrirq , usrioport , mixingactline , dmaactline , ioportactline : integer ;
  132.         irqactline , advancedactline , launchactline , usrscreen , quality : integer ;
  133.  
  134.         funckey , savenow : boolean ;
  135.         advancedopt : array [1..advancedmaxline] of boolean ;
  136.  
  137.         param , commandpath : string ;
  138.         tmp : string [5] ;
  139.  
  140.         wordtmp : word ;
  141.  
  142. function getusrinput : char ;
  143.     var dummy : char ;
  144. begin
  145.     dummy := upcase (readkey) ;
  146.     funckey := false ;
  147.     if (dummy = #0) then
  148.     begin
  149.         dummy := upcase (readkey) ;
  150.         funckey := true ;
  151.     end ;
  152.     getusrinput := dummy ;
  153. end ;
  154.  
  155. procedure centertext (ligne,coul : integer; blabla : string) ; { affiche dans la window courante }
  156. begin
  157.     winprint (((vd (-1) - vg (1) - length (blabla) + 1) div 2)+vg (1),vh (0)+ligne,coul,blabla) ;
  158. end ;
  159.  
  160. procedure openwin (info : infowin) ;
  161. begin
  162.     if (winopenshadow (info.x,info.y,info.x+info.long-1,info.y+info.haut-1) = winopenerror) then halt (1) ;
  163.     winframe (VG(0), VH(0), VD(0), VB(0), CAD_SIM,info.coul) ;
  164.     winfill (VG(1), VH(1), VD(-1), VB(-1), ' ',info.coul and $f0) ;
  165. end ;
  166.  
  167. FUNCTION Int2Str(i: LONGINT): STRING;
  168. { Conversion d'un entier en chaîne }
  169. VAR
  170.   s: STRING[11];
  171. BEGIN
  172.   Str(i, s);
  173.   Int2Str := s;
  174. END;
  175.  
  176. begin
  177.     asm mov ax,3 { mode text 80*25*16c }
  178.     int $10 end ;
  179.     winhidecursor ;
  180.     winfill (0,0,79,24,'▒',screenbackgroundcolor) ; { fill the screen }
  181.  
  182.     openwin (titlewin) ;
  183.     centertext (1,titlewincolor,titledemo) ;
  184.     centertext (0,titlewincolor,' TFL & TDV Proudly Present ') ;
  185.  
  186.     openwin (midaswin) ;
  187.     centertext (1,midaswincolor,midastxt) ;
  188.     centertext (0,midaswincolor,' A Big Thanks ') ;
  189.  
  190.     openwin (soundwin) ;
  191.  
  192.     for i := 1 to soundmaxline do
  193.         centertext (i+1,soundwincolor,soundtext [i]) ;
  194.  
  195.     wincolor (vg (2),vh (2),vd (-2),vh (2),soundhighlightcolor) ;
  196.  
  197.     usrcard := 1 ; { GUS }
  198.     usrdma := dmamaxline ; { auto }
  199.     usrioport := ioportmaxline ; { auto }
  200.     usrmixing := 5 ; { 44100 }
  201.     usrirq := irqmaxline ; { auto }
  202.  
  203.     advancedopt [1] := true ; { use EMS }
  204.     advancedopt [2] := true ; { use BPM tempo }
  205.     advancedopt [3] := false ; { Surround }
  206.     advancedopt [4] := true ; { 16 bit }
  207.     advancedopt [5] := true ; { stereo }
  208.     advancedopt [6] := false ; { VGA comp :( }
  209.  
  210.     cardactline := 1 ;
  211.     mixingactline := 5 ; { 44100 }
  212.     dmaactline := dmamaxline ;
  213.     irqactline := irqmaxline ;
  214.     ioportactline := ioportmaxline ;
  215.     quality := 1 ;
  216.  
  217.     launchactline := launchmaxline ; { view all the screen }
  218.     usrscreen := launchmaxline ; { all the screen }
  219.     soundactline := 1 ;
  220.     savenow := false ;
  221.     advancedopt [7] := false ; { laisser a faux !!! quality !!! }
  222.     advancedactline := 1 ;
  223.  
  224.     assign (f,'demo.bat') ;
  225.     {$I-}
  226.     reset (f) ;
  227.     {$I+}
  228.     if ioresult = 0 then
  229.     begin { ecraser les param par defauts }
  230.         read (f,param) ;
  231.         close (f) ;
  232.  
  233.         if pos ('-s',param) > 0 then {card !!! 1-5 }
  234.         begin
  235.             tmp := copy (param,pos ('-s',param)+2,1) ; { +2 coze 0='-',1='s' !!! }
  236.             val (tmp,usrcard,i) ; { i = erreur }
  237.             if i <> 0 then
  238.             begin
  239.                 writeln ('I/O error : demo.bat altered !!!') ;
  240.                 halt (2) ;
  241.             end ;
  242.             cardactline := usrcard ;
  243.         end ;
  244.  
  245.         if pos ('-m',param) > 0 then { port 11025-44100 }
  246.         begin
  247.             tmp := copy (param,pos ('-m',param)+2,5) ; { +2 coze 0='-',1='m' !!! }
  248.             val (tmp,wordtmp,i) ; { i = erreur }
  249.             if i <> 0 then
  250.             begin
  251.                 writeln ('I/O error : demo.bat altered !!!') ;
  252.                 halt (2) ;
  253.             end ;
  254.             case wordtmp of
  255.             11025 : mixingactline := 1 ;
  256.             15000 : mixingactline := 2 ;
  257.             22050 : mixingactline := 3 ;
  258.             33000 : mixingactline := 4 ;
  259.             44100 : mixingactline := 5 ;
  260.             end ;
  261.             usrmixing := mixingactline ;
  262.         end ;
  263.  
  264.         if pos ('-d',param) > 0 then { dma 1-7 }
  265.         begin
  266.             tmp := copy (param,pos ('-d',param)+2,1) ; { +2 coze 0='-',1='d' !!! }
  267.             val (tmp,usrdma,i) ; { i = erreur }
  268.             if i <> 0 then
  269.             begin
  270.                 writeln ('I/O error : demo.bat altered !!!') ;
  271.                 halt (2) ;
  272.             end ;
  273.             dmaactline := usrdma ;
  274.         end ;
  275.  
  276.         if pos ('-p',param) > 0 then { port 210-270 en hexa ! }
  277.         begin
  278.             tmp := copy (param,pos ('-p',param)+2,3) ; { +2 coze 0='-',1='p' !!! }
  279.             val (tmp,usrioport,i) ; { i = erreur }
  280.             if i <> 0 then
  281.             begin
  282.                 writeln ('I/O error : demo.bat altered !!!') ;
  283.                 halt (2) ;
  284.             end ;
  285.             case usrioport of
  286.             210 : ioportactline := 1 ;
  287.             220 : ioportactline := 2 ;
  288.             230 : ioportactline := 3 ;
  289.             240 : ioportactline := 4 ;
  290.             250 : ioportactline := 5 ;
  291.             260 : ioportactline := 6 ;
  292.             270 : ioportactline := 7 ;
  293.             end ;
  294.             usrioport := ioportactline ;
  295.         end ;
  296.  
  297.         if pos ('-i',param) > 0 then { irq 1-15 }
  298.         begin
  299.             tmp := copy (param,pos ('-i',param)+2,2) ; { +2 coze 0='-',1='i' !!! }
  300.             if tmp [2] = ' ' then
  301.                tmp [0] := chr (1) ; { forcer !!! }
  302.             val (tmp,usrirq,i) ; { i = erreur }
  303.             if i <> 0 then
  304.             begin
  305.                 writeln ('I/O error : demo.bat altered !!!') ;
  306.                 halt (2) ;
  307.             end ;
  308.             irqactline := usrirq ;
  309.         end ;
  310.  
  311.         if pos ('-e',param) > 0 then { EMS }
  312.             advancedopt [1] := false ;
  313.          
  314.         if pos ('-t',param) > 0 then { BPM }
  315.             advancedopt [2] := false ;
  316.  
  317.         if pos ('-u',param) > 0 then { surround }
  318.             advancedopt [3] := true ;
  319.  
  320.         if pos ('-o1m',param) > 0 then { 16 bit mono ... encore du code inutile !!! } 
  321.         begin
  322.             advancedopt [4] := true ;
  323.             advancedopt [5] := false ;
  324.         end ;
  325.  
  326.         if pos ('-o1s',param) > 0 then { 16 bit stereo }
  327.         begin
  328.             advancedopt [4] := true ;
  329.             advancedopt [5] := true ;
  330.         end ;
  331.  
  332.         if pos ('-o8m',param) > 0 then { 8 bit mono }
  333.         begin
  334.             advancedopt [4] := false ;
  335.             advancedopt [5] := false ;
  336.         end ;
  337.  
  338.         if pos ('-o8s',param) > 0 then { 8 bit stereo }
  339.         begin
  340.             advancedopt [4] := false ;
  341.             advancedopt [5] := true ;
  342.         end ;
  343.  
  344.         if pos ('-w',param) > 0 then { EMS }
  345.         begin
  346.             tmp := copy (param,pos ('-w',param)+2,1) ; { +2 coze 0='-',1='w' !!! }
  347.             val (tmp,wordtmp,i) ; { i = erreur }
  348.             if i <> 0 then
  349.             begin
  350.                 writeln ('I/O error : demo.bat altered !!!') ;
  351.                 halt (2) ;
  352.             end ;
  353.             if wordtmp = 0 then
  354.                 advancedopt [6] := false
  355.             else
  356.                 advancedopt [6] := true ;
  357.         end ;
  358.  
  359.         if pos ('-oh',param) > 0 then { quality high }
  360.             quality := 1 ;
  361.  
  362.         if pos ('-om',param) > 0 then { quality medium ... beaucoup de code inutile !!! }
  363.             quality := 3 ;
  364.         
  365.         if pos ('-ol',param) > 0 then { quality low }
  366.             quality := 2 ;
  367.  
  368.         if pos ('-g',param) > 0 then { screen 1-17 }
  369.         begin
  370.             tmp := copy (param,pos ('-g',param)+2,2) ; { +2 coze 0='-',1='g' !!! }
  371.             if tmp [2] = ' ' then
  372.                tmp [0] := chr (1) ; { forcer !!! }
  373.             val (tmp,usrscreen,i) ; { i = erreur }
  374.             if i <> 0 then
  375.             begin
  376.                 writeln ('I/O error : demo.bat altered !!!') ;
  377.                 halt (2) ;
  378.             end ;
  379.             launchactline := usrscreen ;
  380.         end ;
  381.  
  382.     end ;
  383.  
  384.     repeat
  385.         usrinput := getusrinput ;
  386.         if funckey then
  387.         begin
  388.             if usrinput = 'H' then
  389.             begin { fleche haut }
  390.                 wincolor (vg (2),vh (1)+soundactline,vd (-2),vh (1)+soundactline,soundwincolor) ;
  391.                 dec (soundactline) ;
  392.                 if soundactline = soundbadline then
  393.                     dec (soundactline)
  394.                 else if soundactline = 0 then
  395.                     soundactline := soundmaxline ;
  396.                 wincolor (vg (2),vh (1)+soundactline,vd (-2),vh (1)+soundactline,soundhighlightcolor) ;
  397.             end
  398.  
  399.             else if usrinput = 'P' then { fleche bas }
  400.             begin
  401.                 wincolor (vg (2),vh (1)+soundactline,vd (-2),vh (1)+soundactline,soundwincolor) ;
  402.                 inc (soundactline) ;
  403.                 if soundactline = soundbadline then
  404.                     inc (soundactline)
  405.                 else if soundactline = soundmaxline+1 then
  406.                     soundactline := 1 ;
  407.                 wincolor (vg (2),vh (1)+soundactline,vd (-2),vh (1)+soundactline,soundhighlightcolor) ;
  408.             end
  409.         end
  410.         else if usrinput = #13 then { else if not funckey }
  411.         case soundactline of
  412.         1 : begin { cardtype }
  413.                 openwin (cardwin) ;
  414.                 for i := 1 to cardmaxline do
  415.                     centertext (i,cardwincolor,cardtype [i]) ;
  416.                 wincolor (vg (1),vh (0)+cardactline,vd (-1),vh (0)+cardactline,highlightcolor) ;
  417.                 repeat
  418.                     usrinput := getusrinput ;
  419.                     if funckey then
  420.                         if usrinput = 'H' then { fleche haut }
  421.                         begin
  422.                             wincolor (vg (1),vh (0)+cardactline,vd (-1),vh (0)+cardactline,cardwincolor) ;
  423.                             dec (cardactline) ;
  424.                             if cardactline = 0 then
  425.                                 cardactline := cardmaxline ;
  426.                             wincolor (vg (1),vh (0)+cardactline,vd (-1),vh (0)+cardactline,highlightcolor) ;
  427.                         end
  428.                         else if usrinput = 'P' then { fleche bas }
  429.                         begin
  430.                             wincolor (vg (1),vh (0)+cardactline,vd (-1),vh (0)+cardactline,cardwincolor) ;
  431.                             inc (cardactline) ;
  432.                             if cardactline = cardmaxline+1 then
  433.                                 cardactline := 1 ;
  434.                             wincolor (vg (1),vh (0)+cardactline,vd (-1),vh (0)+cardactline,highlightcolor) ;
  435.                         end
  436.                 until usrinput = #13 ;
  437.                 winclose (true) ;
  438.                 usrcard := cardactline ;
  439.  
  440.             end ;
  441.  
  442.         2 : if usrcard <> 5 then
  443.             begin { mixing frequency }
  444.                 openwin (mixingwin) ;
  445.                 for i := 1 to mixingmaxline do
  446.                     centertext (i,mixingwincolor,mixingfreq [i]) ;
  447.                 wincolor (vg (1),vh (0)+mixingactline,vd (-1),vh (0)+mixingactline,highlightcolor) ;
  448.                 repeat
  449.                     usrinput := getusrinput ;
  450.                     if funckey then
  451.                         if usrinput = 'H' then { fleche haut }
  452.                         begin
  453.                             wincolor (vg (1),vh (0)+mixingactline,vd (-1),vh (0)+mixingactline,mixingwincolor) ;
  454.                             dec (mixingactline) ;
  455.                             if mixingactline = 0 then
  456.                                 mixingactline := mixingmaxline ;
  457.                             wincolor (vg (1),vh (0)+mixingactline,vd (-1),vh (0)+mixingactline,highlightcolor) ;
  458.                         end
  459.                         else if usrinput = 'P' then { fleche bas }
  460.                         begin
  461.                             wincolor (vg (1),vh (0)+mixingactline,vd (-1),vh (0)+mixingactline,mixingwincolor) ;
  462.                             inc (mixingactline) ;
  463.                             if mixingactline = mixingmaxline+1 then
  464.                                 mixingactline := 1 ;
  465.                             wincolor (vg (1),vh (0)+mixingactline,vd (-1),vh (0)+mixingactline,highlightcolor) ;
  466.                         end
  467.                 until usrinput = #13 ;
  468.                 winclose (true) ;
  469.                 usrmixing := mixingactline ;
  470.             end ;
  471.  
  472.         3 : if usrcard <> 5 then
  473.             begin { dma channel }
  474.                 openwin (dmawin) ;
  475.                 for i := 1 to dmamaxline do
  476.                     centertext (i,dmawincolor,dma [i]) ;
  477.                 wincolor (vg (1),vh (0)+dmaactline,vd (-1),vh (0)+dmaactline,highlightcolor) ;
  478.                 repeat
  479.                     usrinput := getusrinput ;
  480.                     if funckey then
  481.                         if usrinput = 'H' then { fleche haut }
  482.                         begin
  483.                             wincolor (vg (1),vh (0)+dmaactline,vd (-1),vh (0)+dmaactline,dmawincolor) ;
  484.                             dec (dmaactline) ;
  485.                             if dmaactline = 0 then
  486.                                 dmaactline := dmamaxline
  487.                             else if dmaactline = dmabadline then
  488.                                 dec (dmaactline) ;
  489.                             wincolor (vg (1),vh (0)+dmaactline,vd (-1),vh (0)+dmaactline,highlightcolor) ;
  490.                         end
  491.                         else if usrinput = 'P' then { fleche bas }
  492.                         begin
  493.                             wincolor (vg (1),vh (0)+dmaactline,vd (-1),vh (0)+dmaactline,dmawincolor) ;
  494.                             inc (dmaactline) ;
  495.                             if dmaactline = dmamaxline+1 then
  496.                                 dmaactline := 1
  497.                             else if dmaactline = dmabadline then
  498.                                 inc (dmaactline) ;
  499.                             wincolor (vg (1),vh (0)+dmaactline,vd (-1),vh (0)+dmaactline,highlightcolor) ;
  500.                         end
  501.                 until usrinput = #13 ;
  502.                 winclose (true) ;
  503.                 usrdma := dmaactline ;
  504.             end ;
  505.  
  506.           4: if usrcard <> 5 then
  507.              begin { io port }
  508.                  openwin (ioportwin) ;
  509.                  for i := 1 to ioportmaxline do
  510.                     centertext (i,ioportwincolor,ioport [i]) ;
  511.                  wincolor (vg (1),vh (0)+ioportactline,vd (-1),vh (0)+ioportactline,highlightcolor) ;
  512.                  repeat
  513.                      usrinput := getusrinput ;
  514.                      if funckey then
  515.                          if usrinput = 'H' then { fleche haut }
  516.                          begin
  517.                              wincolor (vg (1),vh (0)+ioportactline,vd (-1),vh (0)+ioportactline,ioportwincolor) ;
  518.                              dec (ioportactline) ;
  519.                              if ioportactline = 0 then
  520.                                  ioportactline := ioportmaxline
  521.                              else if ioportactline = ioportbadline then
  522.                                  dec (ioportactline) ;
  523.                              wincolor (vg (1),vh (0)+ioportactline,vd (-1),vh (0)+ioportactline,highlightcolor) ;
  524.                          end
  525.                          else if usrinput = 'P' then { fleche bas }
  526.                          begin
  527.                              wincolor (vg (1),vh (0)+ioportactline,vd (-1),vh (0)+ioportactline,ioportwincolor) ;
  528.                              inc (ioportactline) ;
  529.                              if ioportactline = ioportmaxline+1 then
  530.                                  ioportactline := 1
  531.                              else if ioportactline = ioportbadline then
  532.                                  inc (ioportactline) ;
  533.                              wincolor (vg (1),vh (0)+ioportactline,vd (-1),vh (0)+ioportactline,highlightcolor) ;
  534.                          end
  535.                  until usrinput = #13 ;
  536.                  winclose (true) ;
  537.                  usrioport := ioportactline ;
  538.             end ;
  539.  
  540.         5: if usrcard <> 5 then
  541.            begin { irq }
  542.                openwin (irqwin) ;
  543.                for i := 1 to irqmaxline do
  544.                    centertext (i,irqwincolor,irq [i]) ;
  545.                wincolor (vg (1),vh (0)+irqactline,vd (-1),vh (0)+irqactline,highlightcolor) ;
  546.                repeat
  547.                    usrinput := getusrinput ;
  548.                    if funckey then
  549.                        if usrinput = 'H' then { fleche haut }
  550.                        begin
  551.                            wincolor (vg (1),vh (0)+irqactline,vd (-1),vh (0)+irqactline,irqwincolor) ;
  552.                            dec (irqactline) ;
  553.                            if irqactline = 0 then
  554.                                irqactline := irqmaxline
  555.                            else if irqactline = irqbadline then
  556.                                dec (irqactline) ;
  557.                            wincolor (vg (1),vh (0)+irqactline,vd (-1),vh (0)+irqactline,highlightcolor) ;
  558.                        end
  559.                        else if usrinput = 'P' then { fleche bas }
  560.                        begin
  561.                            wincolor (vg (1),vh (0)+irqactline,vd (-1),vh (0)+irqactline,irqwincolor) ;
  562.                            inc (irqactline) ;
  563.                            if irqactline = irqmaxline+1 then
  564.                                irqactline := 1
  565.                            else if irqactline = irqbadline then
  566.                                inc (irqactline) ;
  567.                            wincolor (vg (1),vh (0)+irqactline,vd (-1),vh (0)+irqactline,highlightcolor) ;
  568.                        end
  569.                until usrinput = #13 ;
  570.                winclose (true) ;
  571.                usrirq := irqactline ;
  572.           end ;
  573.  
  574.           6: { advanced }
  575.               if usrcard <> 5 then { No sound ? }
  576.               begin
  577.                   openwin (advancedwin) ;
  578.  
  579.                   for i := 1 to advancedmaxline do
  580.                   begin
  581.                       winprint (vg (2),vh (0)+i,advancedwincolor,advanced [i]) ;
  582.                       if advancedopt [i] then
  583.                           winputchar (vg (3),vh (0)+i,'■',advancedwincolor) ;
  584.                   end ;
  585.  
  586.                   winputchar (vg (3),vh (0)+7,qualitytbl [quality],advancedwincolor) ;
  587.  
  588.                   wincolor (vg (1),vh (0)+advancedactline,vd (-1),vh (0)+advancedactline,highlightcolor) ;
  589.                   repeat
  590.                       usrinput := getusrinput ;
  591.                       if funckey then
  592.                       begin
  593.                           if usrinput = 'H' then { fleche haut }
  594.                           begin
  595.                               wincolor (vg (1),vh (0)+advancedactline,vd (-1),vh (0)+advancedactline,advancedwincolor) ;
  596.                               dec (advancedactline) ;
  597.                               if advancedactline = 0 then
  598.                                   advancedactline := advancedmaxline ;
  599.                               wincolor (vg (1),vh (0)+advancedactline,vd (-1),vh (0)+advancedactline,highlightcolor) ;
  600.                           end
  601.                           else if usrinput = 'P' then { fleche bas }
  602.                           begin
  603.                               wincolor (vg (1),vh (0)+advancedactline,vd (-1),vh (0)+advancedactline,advancedwincolor) ;
  604.                               inc (advancedactline) ;
  605.                               if advancedactline = advancedmaxline+1 then
  606.                                   advancedactline := 1 ;
  607.                               wincolor (vg (1),vh (0)+advancedactline,vd (-1),vh (0)+advancedactline,highlightcolor) ;
  608.                           end
  609.                       end
  610.                       else if usrinput = #32 then { funckey = false }
  611.                       begin
  612.                           if advancedactline = 7 then { Quality }
  613.                           begin
  614.                               inc (quality) ;
  615.                               if quality = 4 then
  616.                                   quality := 1 ;
  617.                               winputchar (vg (3),vh (0)+7,qualitytbl [quality],highlightcolor) ;
  618.                           end
  619.                           else { advancedactline <> 7 }
  620.                           begin
  621.                               if advancedopt [advancedactline] then
  622.                                   winputchar (vg (3),vh (0)+advancedactline,#32,highlightcolor)
  623.                               else
  624.                                   winputchar (vg (3),vh (0)+advancedactline,'■',highlightcolor) ;
  625.                               advancedopt [advancedactline] := not advancedopt [advancedactline] ;
  626.                           end ;
  627.                       end ;
  628.                   until usrinput = #13 ;
  629.                   winclose (true) ;
  630.               end
  631.               else { no sound !!! }
  632.               begin
  633.                   openwin (advanced2win) ;
  634.                   winprint (vg (1),vh (1),advanced2wincolor,advanced2 [1]) ;
  635.                   if advancedopt [6] then
  636.                       winputchar (vg (2),vh (1),'■',advanced2wincolor) ;
  637.                   wincolor (vg (1),vh (1),vd (-1),vh (1),highlightcolor) ;
  638.                   repeat
  639.                       usrinput := getusrinput ;
  640.                       if (usrinput = #32) and not funckey then { space }
  641.                       begin 
  642.                           if advancedopt [6] then { VGA Comp. }
  643.                               winputchar (vg (2),vh (1),#32,highlightcolor)
  644.                           else
  645.                               winputchar (vg (2),vh (1),'■',highlightcolor) ;
  646.                           advancedopt [6] := not advancedopt [6] ;
  647.                       end ;
  648.                   until (usrinput = #13) and not funckey ;
  649.                   winclose (true) ;
  650.               end ;
  651.  
  652. {          7: begin
  653.              end ; bad line :}
  654.  
  655.           8 : begin
  656.                   savenow := true ;
  657.                   openwin (launchwin) ;
  658.                   for i := 1 to launchmaxline do
  659.                       centertext (i,launchwincolor,launch [i]) ;
  660.                   wincolor (vg (1),vh (0)+launchactline,vd (-1),vh (0)+launchactline,highlightcolor) ;
  661.                   repeat
  662.                       usrinput := getusrinput ;
  663.                       if funckey then
  664.                           if usrinput = 'H' then { fleche haut }
  665.                           begin
  666.                               wincolor (vg (1),vh (0)+launchactline,vd (-1),vh (0)+launchactline,launchwincolor) ;
  667.                               dec (launchactline) ;
  668.                               if launchactline = 0 then
  669.                                   launchactline := launchmaxline
  670.                               else if launchactline = launchbadline then
  671.                                   dec (launchactline) ;
  672.                               wincolor (vg (1),vh (0)+launchactline,vd (-1),vh (0)+launchactline,highlightcolor) ;
  673.                           end
  674.                           else if usrinput = 'P' then { fleche bas }
  675.                           begin
  676.                               wincolor (vg (1),vh (0)+launchactline,vd (-1),vh (0)+launchactline,launchwincolor) ;
  677.                               inc (launchactline) ;
  678.                               if launchactline = launchmaxline+1 then
  679.                                   launchactline := 1
  680.                               else if launchactline = launchbadline then
  681.                                   inc (launchactline) ;
  682.                               wincolor (vg (1),vh (0)+launchactline,vd (-1),vh (0)+launchactline,highlightcolor) ;
  683.                           end
  684.                    until usrinput = #13 ;
  685.                    winclose (true) ;
  686.                    usrscreen := launchactline ;
  687.               end ;
  688.           end ;
  689.  
  690.     until ((not funckey) and (usrinput = #27)) or savenow ;
  691.  
  692.     winclose (true) ; { titre }
  693.     winclose (true) ; { main }
  694.     winclose (true) ; { MIDAS }
  695.  
  696.     asm mov ax,3 { mode text 80*25*16c }
  697.     int $10 end ;
  698.  
  699.     if savenow then
  700.     begin
  701.         assign (f,'demo.bat') ;
  702.         rewrite (f) ;
  703.  
  704.         param := '@contrast.exe -s' ;
  705.         param := param + int2str (usrcard) ;
  706.  
  707.         if usrcard < 5 then { no sound ??? }
  708.         begin { noooooo i wont sound }
  709.  
  710.             case usrmixing of
  711.             1 : param := param + ' -m11025 ' ;
  712.             2 : param := param + ' -m15000 ' ;
  713.             3 : param := param + ' -m22050 ' ;
  714.             4 : param := param + ' -m33000 ' ;  
  715.             5 : param := param + ' -m44100 ' ;
  716.             end ;
  717.  
  718.             if usrdma <> dmamaxline then { auto }
  719.                 param := param + ' -d' + int2str (usrdma) + ' ' ;
  720.  
  721.             case usrioport of  
  722.             1 : param := param + '-p210 ' ;
  723.             2 : param := param + '-p220 ' ;
  724.             3 : param := param + '-p230 ' ;
  725.             4 : param := param + '-p240 ' ;
  726.             5 : param := param + '-p250 ' ;
  727.             6 : param := param + '-p260 ' ;
  728.             7 : param := param + '-p270 ' ; 
  729.           { 9 : nothing !!! = auto = portmaxline }
  730.             end ;
  731.  
  732.             if usrirq <> irqmaxline then
  733.                 param := param + ' -i' + int2str (usrirq) ;
  734.  
  735.             if not advancedopt [2] then
  736.                 param := param + ' -t' ; { disable BPM }
  737.  
  738.             if advancedopt [3] then
  739.                 param := param + ' -u' ; { enable surround }
  740.  
  741.             if advancedopt [4] then
  742.                 if advancedopt [5] then
  743.                     param := param + ' -o1s'
  744.                 else
  745.                     param := param + ' -o1m'
  746.             else
  747.                 if advancedopt [5] then
  748.                     param := param + ' -o8s'
  749.                 else
  750.                     param := param + ' -o8m' ; { warning on test la quality medium avec -om !!! }
  751.  
  752.             param := param + ' -o' + qualitytbl [quality] ;
  753.  
  754.         end ; { usrcard < 5 }
  755.  
  756.         if not advancedopt [1] then
  757.             param := param + ' -e' ; { disable EMS }
  758.  
  759.         if usrscreen <> launchmaxline then { view a specific part }
  760.             param := param + ' -g' + int2str (usrscreen) ;
  761.  
  762.  
  763.         if advancedopt [6] then { a laisser en dernier !!!!!!!!!!! }
  764.             param := param + ' -w1'
  765.         else
  766.             param := param + ' -w0' ;
  767.  
  768.         write (f,param) ;
  769.         close (f) ;
  770.  
  771.         commandpath := getenv ('COMSPEC') ;
  772.         if commandpath = '' then
  773.         begin
  774.             assign (f,'c:\command.com') ;
  775.             {$I-}
  776.             reset (f) ;
  777.             {$I+}
  778.             if ioresult <> 0 then
  779.             begin
  780.                 winprint (0,0,7,'Warning : unable to locate command.com ...') ;
  781.                 winprint (0,2,7,'Hey Dude ... type this line at the dos prompt :)') ;
  782.                 winprint (0,3,7,'SET COMSPEC=driveletter:\fullpath\command.com') ;
  783.                 winsetcursor (0,4) ;
  784.                 halt (1) ;
  785.             end ;
  786.             close (f) ;
  787.             readln ;
  788.             commandpath := 'c:\command.com' ;
  789.         end ;
  790.  
  791.         swapvectors ;
  792.         exec (commandpath,'/c demo.bat') ;
  793.         swapvectors ;
  794.  
  795.     end ;
  796.  
  797. end.